// src/store/modules/audio.js
export default {
  namespaced: true,
  state: {
    audioInstance: null,// 全局音频实例
    currentAudio: null,// 当前播放的音频信息（含id、audio_url等）
    isPlaying: false, // 播放状态
    duration: 0, // 当前音频总时长（秒）
    currentTime: 0 // 当前播放进度（秒）
  },
  mutations: {
    // 初始化音频实例
    INIT_AUDIO_INSTANCE(state) {
      if (!state.audioInstance) {
        state.audioInstance = new Audio()
        // 监听音频结束事件
        state.audioInstance.addEventListener('ended', () => {
          state.isPlaying = false
          state.currentAudio = null
          state.currentTime = 0
          // 保留 duration，用于显示完整长度或下一次加载覆盖
        })

        // 元数据加载完成，获取总时长
        state.audioInstance.addEventListener('loadedmetadata', () => {
          state.duration = Number(state.audioInstance.duration) || 0
        })

        // 播放进度更新
        state.audioInstance.addEventListener('timeupdate', () => {
          state.currentTime = Number(state.audioInstance.currentTime) || 0
        })
      }
    },

    // 设置当前播放音频
    SET_CURRENT_AUDIO(state, audio) {
      state.currentAudio = audio
    },

    // 更新播放状态
    SET_PLAYING_STATE(state, isPlaying) {
      state.isPlaying = isPlaying
    }
    ,
    // 设置总时长
    SET_DURATION(state, duration) {
      state.duration = duration || 0
    },
    // 设置当前进度
    SET_CURRENT_TIME(state, time) {
      state.currentTime = time || 0
    }
  },

  actions: {
    // 初始化音频实例
    initAudio({ commit }) {
      commit('INIT_AUDIO_INSTANCE')
    },

    // 切换播放/暂停
    togglePlay({ state, commit }, audioInfo) {
      // 确保实例已初始化
      if (!state.audioInstance) {
        commit('INIT_AUDIO_INSTANCE')
      }

      const { audioInstance } = state

      // 播放新音频（与当前不同时）
      if (!state.currentAudio || state.currentAudio.id !== audioInfo.id) {
        audioInstance.src = audioInfo.audio_url
        audioInstance.load()
        commit('SET_CURRENT_AUDIO', audioInfo)
        // 重置时长与进度，待loadedmetadata更新
        commit('SET_DURATION', 0)
        commit('SET_CURRENT_TIME', 0)
      }

      // 切换状态
      if (state.isPlaying) {
        audioInstance.pause()
        commit('SET_PLAYING_STATE', false)
      } else {
        audioInstance.play().catch(err => console.error('播放失败:', err))
        commit('SET_PLAYING_STATE', true)
      }
    },

    // 暂停播放
    pauseAudio({ state, commit }) {
      if (state.audioInstance && state.isPlaying) {
        state.audioInstance.pause()
        commit('SET_PLAYING_STATE', false)
      }
    }
  },

  getters: {
    // 获取当前播放状态
    getIsPlaying: state => state.isPlaying,
    // 获取当前播放音频
    getCurrentAudio: state => state.currentAudio,
    // 当前总时长（秒）
    getDuration: state => state.duration,
    // 当前进度（秒）
    getCurrentTime: state => state.currentTime
  }
}